#include "MsgNode.h"
#include <cstring>
#include "boost/asio.hpp"

#include "const.h"
//MsgNode为存储读取数据的节点时
MsgNode::MsgNode(int total_len)
:_total_len(total_len),_cur_len(0)
{
    _msg = new char[_total_len+1];
    memset(_msg,0,_total_len);
}


MsgNode::~MsgNode()
{
    delete[] _msg;
}

RecvNode::RecvNode(short max_len,short msg_id)
:MsgNode(max_len),_msg_id(msg_id)
{

}

SendNode::SendNode(const char *msg, short max_len,short msg_id)
:MsgNode(max_len+HEAD_TOTAL_LEN),_msg_id(msg_id)
{
    //拷贝数据到_msg中
    //将消息id转换为网络字节序
    short msg_id_network = boost::asio::detail::socket_ops::host_to_network_short(msg_id);
    //将消息数据长度转换为网络字节序
    short max_len_network = boost::asio::detail::socket_ops::host_to_network_short(max_len);
    memcpy(_msg,&msg_id_network,HEAD_ID_LEN);
    memcpy(_msg+HEAD_ID_LEN,&max_len_network,HEAD_DATA_LEN);
    memcpy(_msg+HEAD_TOTAL_LEN,msg,max_len);
}